package com.zynn.service.module.calculate.dao;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zynn.common.pojo.dto.user.UserDataDTO;
import com.zynn.common.pojo.result.Result;
import com.zynn.service.module.calculate.bo.DegOneFrientWithWeight;
import com.zynn.service.module.calculate.entity.BlendBaseUserCache;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author 刘猛
 * @since 2018-10-09
 */
@Mapper
public interface BlendBaseUserCacheMapper extends BaseMapper<BlendBaseUserCache> {

    /**
     * 插入数据到缓存表
     * @param sequenceId
     * @param userId
     */
    void insertBlendBaseRecommendUsers2CacheTableDegOne(@Param("sequenceId") Long sequenceId, @Param("userId") Long userId);


    void insertBlendBaseRecommendUsers2CacheTable(@Param("userId") Long userId, @Param("sequenceId") Long sequenceId, @Param("sequenceIdUp") Long sequenceIdUp);

    /**
     * 查询缓存表用户
     *
     * @param sequenceId
     * @return
     */
    Set<Long> queryDegfriends(@Param("sequenceId") Long sequenceId);

    /**
     * 查询学校权重好友
     *
     * @param userId
     * @param sequenceId
     * @param degScore
     * @return
     */
    List<DegOneFrientWithWeight> querySchoolWeightFriends(@Param("userId") Long userId, @Param("sequenceId") Long sequenceId, @Param("degScore") int degScore);


    /**
     * 查询操作推荐用户
     *
     * @param userId
     * @param sequenceId
     * @return
     */
    List<DegOneFrientWithWeight> queryHandleWeightFriends(@Param("userId") Long userId, @Param("sequenceId") Long sequenceId, @Param("sequenceDegUp") Long sequenceDegUp);


    void deleteCacheDatas(@Param("list") List<Long> sequenceIds);


    /**
     * @author  jerry-liqi
     *
     * 备注: 查询我关注的同校好友(带有学校资料信息)
     *
     * @return List<DegOneFrientWithWeight>
     */
    List<DegOneFrientWithWeight> getMyAttentionSchoolFriends(@Param("userId") Long userId);

    /**
     * @author  jerry-liqi
     *
     * 备注：查询带有学校资料的同校好友
     *
     * @return List<DegOneFrientWithWeight>
     */
    List<DegOneFrientWithWeight> getSchoolFriendsWithElseInfo(@Param("ids") String ids);


    /**
     * @author jerry-liqi
     *
     * @apiNote 查询用户的邀请和被邀请关系用户ID
     *
     * @param userId 用户ID
     *
     * @return  Set<Long>
     */
    Set<Long> getSchoolUserIdWithInvitation(@Param("userId") Long userId);


    /**
     * @author jerry-liqi
     *
     * 查询被推荐用户的 省份和城市是否填写完整
     *
     * @return userId一个ID集合
     */
    Set<Long> getUserIdCityAndAreaIsnull(@Param("userId") Long userId);


    /**
     * @author jerry-liqi
     *
     * 查询被推荐用户的 同省同城的好友
     *
     */
    Set<Long> getUserIdHaveSameProvinceAndCity(@Param("userId") Long userId,@Param("ids") String ids);

    /**
     * @author jerry-liqi
     *
     * 查询推荐用户 同省不同城好友
     *
     */
    Set<Long> getUserIdHaveSameProvinceWithDiffCity(@Param("userId") Long userId);


    /**
     * @author jerry-liqi
     *
     * 获得关注我的 且我未关注的用户ID集合
     */
    Set<Long> getFriendHaveAttentionMe(@Param("userId") Long userId);

    /**
     * @author jerry-liqi
     *
     * 获得我关注的 且还没关注我的
     */
    Set<Long> getMyAttentionFriend(@Param("userId") Long userId);


    /**
     * 查询用户 互相关注的集合
     * @param userId 被推荐用户ID
     * @return set
     */
    Set<Long> getAttentionEachOther(@Param("userId") Long userId);


    /**
     * 获取用户基础信息
     * @param userIds 用户ID集合
     * @return result
     */
    List<UserDataDTO> batchQueryUserBaseInfo(@RequestParam("userIds") List<Long> userIds);

}
